Jochen Zeirzer

Abanico

Der Fächer ist nicht bloß das vordergründige Utensil zur Kühlung an heißen Sommertagen, sondern gleichermaßen ein Instrument der Koketterie und Kommunikation. Er ist ein Accessoire, das wie sein Archetyp – das Gefieder einiger Vogelarten – dazu dient, Aufmerksamkeit und Gefallen zu erregen. Diese Eigenschaft des Fächers macht sich die Arbeit Abanico zunutze: Über eine Sensorik werden Personen, die sich im Sichtfeld befinden, erkannt. Die Maschine entfaltet einen hölzernen Faltfächer und vollführt eine klassische Geste, mit der sie nach Aufmerksamkeit strebt.



Abanico01.jpg

Abanico02.jpg

Fotografie: Image Recorder


Technische Beschreibung
 

Holzfächer, Aluminiumblech, Stahlrohr, Grove Ultrasonic Ranger, Servomotoren, Arduino Duemilanove, Elektronikbauteile
 

Abanico03.jpg

Abanico04.jpg

Arduino - Code

/* Created by Jochen Zeirzer http://www.jochen_zeirzer.public2.linz.at/ project: abanico year: 2013
Ping))) Sensor http://www.arduino.cc/en/Tutorial/Ping
created 3 Nov 2008 by David A. Mellis modified 30 Aug 2011 by Tom Igoe */
#include <VarSpeedServo.h>
//Servos // create variable speed servo objects to control servos 1-3 VarSpeedServo servo1; // Servo to tilt Fan VarSpeedServo servo2; // Servo to open and close Fan VarSpeedServo servo3; // Servo to rotate Base
int trans1 = 6; // transistor to switch Servo 1 on Pin 11 int trans2 = 5; // transistor to switch Servo 2 on Pin 10 int trans3 = 3; // transistor to switch Servo 3 on Pin 9
int counter; // initialize a counter to count how often the distance has been measured int wait = 5250; // initialize a delay for the calibration movement - every 5250 measurements (approx. every 10 min)
const int pingPin = 7; // Grove Ultrasonic Ranger on Pin 7 const int threshold = 140; // Threshold level digital input (Ultra Sonic Ranger)
void setup() {
// initialize serial communication Serial.begin(9600);
pinMode(trans1, OUTPUT); // initialize the Transistors 1 - 3 as output: pinMode(trans2, OUTPUT); pinMode(trans3, OUTPUT);
servo1.attach(11); // Servo 1 (Fan Tilt) on pin 11 servo1.writeMicroseconds(620); // variable speed servo1 position in Microdseconds servo2.attach(10); // Servo 2 (Fan open/close) on pin 10 servo2.writeMicroseconds(570); // variable speed servo1 position in Microdseconds servo3.attach(9); // Servo 3 (Base rotation) on pin 9 servo3.writeMicroseconds(600); // variable speed servo1 position in Microdseconds
digitalWrite(trans1, LOW); // Set default state of Transistors 1 - 3 to LOW digitalWrite(trans2, LOW); digitalWrite(trans3, LOW); }
long microsecondsToCentimeters(long microseconds) { // The speed of sound is 340 m/s or 29 microseconds per centimeter. // The ping travels out and back, so to find the distance of the // object we take half of the distance travelled. return microseconds / 29 / 2; }
void loop() {
counter += 1; // establish variables for duration of the ping, // and the distance result in centimeters: long duration, cm;
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW);
// The same pin is used to read the signal from the PING))): a HIGH // pulse whose duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH);
// convert the time into a distance cm = microsecondsToCentimeters(duration);
int digitalValue = microsecondsToCentimeters(duration);
Serial.print(cm); Serial.print("cm"); Serial.print(", counter "); Serial.print(counter); Serial.println();
delay(100);
if(counter >= wait) { // If the counter reaches the benchmark of "wait" (5250 distance measurments) start calibration movement
digitalWrite(trans1, HIGH); digitalWrite(trans2, HIGH); digitalWrite(trans3, HIGH); servo1.writeMicroseconds(620); servo2.writeMicroseconds(570); servo3.writeMicroseconds(600); delay(100); servo2.slowmove(2500, 40); delay(1800); digitalWrite(trans1, LOW); digitalWrite(trans2, LOW); digitalWrite(trans3, LOW); delay(5000); digitalWrite(trans1, HIGH); digitalWrite(trans2, HIGH); digitalWrite(trans3, HIGH); servo2.slowmove(600, 40); delay(1500); servo2.writeMicroseconds(600); delay(100); digitalWrite(trans1, LOW); digitalWrite(trans2, LOW); digitalWrite(trans3, LOW); counter = 0; // reset counter to 0 }
if(digitalValue < threshold) { // If the measured distance drops below 140cm start full movement of the fan counter = 0; // reset counter to 0
digitalWrite(trans1, HIGH); digitalWrite(trans2, HIGH); digitalWrite(trans3, HIGH); servo1.slowmove(1625, 120); delay(350); servo2.slowmove(2500, 160); delay(600); digitalWrite(trans2, LOW); digitalWrite(trans3, LOW); delay(500); digitalWrite(trans1, HIGH); digitalWrite(trans3, HIGH); servo1.slowmove(880, 20); servo3.slowmove(2350, 60); delay(1300); digitalWrite(trans3, LOW); delay(50); digitalWrite(trans1, LOW); delay(4000); digitalWrite(trans1, HIGH); digitalWrite(trans2, HIGH); digitalWrite(trans3, HIGH); servo1.slowmove(620, 10); servo2.slowmove(625, 40); servo3.slowmove(580, 40); delay(1620); servo2.writeMicroseconds(570); delay(200); digitalWrite(trans1, LOW); digitalWrite(trans2, LOW); digitalWrite(trans3, LOW); delay(4000);
counter = 0; // reset counter to 0
} }

 

Die Maschine Abanico ist Teil meiner Diplomarbeit TRIVIAL MOTION an der Universität für künstlerische und industrielle Gestaltung Linz im Bereich Bildende Kunst / Experimentelle Gestaltung.

Trivial Motion - Leseprobe.pdf (84 kB)
       Eine vollständige Ausgabe von TRIVIAL MOTION als Pdf sende ich auf Anfrage gerne zu.